package com.glls.sbdemo22.config;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

import java.io.IOException;

/**
 * @date 2023/5/16
 * @desc
 */
@Configuration
public class JacksonConfig {

    /*@ConditionalOnMissingBean(ObjectMapper.class)   它是修饰bean 的一个注解  主要实现功能是  当一个bean 被注册后，如果后面
     *  注册相同类型的bean， 就不会成功，他会保证你的这个类型的bean 只有一个，即这个bean 实例只有一个， 当出现相同的bean 时，这个注解
     *  就会出现异常，以此来通知开发人员。
     *@Primary   // 简单的说  就是 当Spring 容器扫描到某个接口有多个bean 时， 如果某个bean 上有 @Primary 注解 则这个bean 会被优先选用
     */


    @Bean
    @Primary  //简单的说  就是 当Spring 容器扫描到某个接口有多个bean 时， 如果某个bean 上有 @Primary 注解 则这个bean 会被优先选用
    @ConditionalOnMissingBean(ObjectMapper.class)
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
            @Override
            public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
                jsonGenerator.writeString("");
            }
        });
        return objectMapper;
    }


}
